﻿
using System;
namespace TestApp
{    /*
          素数是指除1及自身以外, 不能被其他数整除的数.
          最小的素数是2, 其他的偶数均不是素数
          对于一个奇数k, 使用3~k的平方根(取整)之间的每个奇数进行运算, 如果找到一个奇数j能被k除尽,
             则k不是素数; 而只有测试完3~k的平方根范围中的所有奇数都不能被k除尽, 才能确定k是素数.
       */
    class Test
    {
        public void calculate(int n)
        {
            int count, j, k;
            if (n >= 2)
            {
                Console.Write("2" + "\t");
            }
            if (n >= 3)
            {
                count = 1; //目前有一个素数, 即2
                k = 3;     //从奇数3开始测试, 偶数不需要测试
                do
                {
                    j = 3;
                    while ((j <= (Math.Sqrt(k))) && (k % j != 0))
                    {
                        j += 2;
                    }
                    if (j > Math.Sqrt(k))
                    {
                        count++;
                        Console.Write(k + "\t");
                        if (count % 5 == 0)
                            Console.WriteLine();//每行输出5个数
                    }
                    k += 2;//测试下一个奇数是否是素数
                } while (k <= n);
                Console.WriteLine("\n共有{0}个素数!", count);
            }
        }
        static void Main(string[] args)
        {
            Test test = new Test();
            int i = 1;
            while (i > 0)
            {
                Console.Write("输入一个整数: ");
                i = Int32.Parse(Console.ReadLine());
                test.calculate(i);
            }
        }
    }
}
